A cache is a collection of data duplicating original values stored elsewhere or computed earlier, where the original data may be expensive to fetch (owing to longer access time) or to compute, compared to the cost of reading the cache. In other words, a cache is a temporary storage area where frequently accessed data can be stored for rapid access. Once the data is stored in the cache, future use can be made by accessing the cached copy rather than re-fetching or recomputing the original data, so that the average access time is shorter. A cache, therefore, helps expedite data access that a central processing unit (CPU) would otherwise need to fetch from main memory. Additionally, as is understood by one skilled in the art, a cache may refer to the block of memory for temporary storage of cached data likely to be used again.
A CPU and hard drive, for example, frequently use a cache, as do web browsers and web servers. More specifically, a cache is made up of a pool of entries. Each entry has a datum (a nugget of data) which is a copy of the datum in some data storage. Each entry also has a tag, which specifies the identity of the datum in the backing store of which the entry is a copy.
When a cache client (e.g., a CPU, web browser, or operating system, amongst other cache clients) wishes to access a datum presumably in the backing store, it first checks the cache. If an entry can be found with a tag matching that of the desired datum, the datum in the entry is used instead. This situation is known as a cache hit. So, for example, a web browser program might check its local cache on disk to see if it has a local copy of the contents of a web page at a particular URL. In this example, the URL is the tag, and the content of the web page is the datum.
Often, data stored in a cache may be encrypted. In cryptography, encryption is the process of transforming information (referred to as plaintext) using an algorithm (called cipher) to make it unreadable to anyone except those possessing special knowledge, usually referred to as a key. The result of the process is encrypted information (in cryptography, referred to as ciphertext). In many contexts, the word encryption also implicitly refers to the reverse process, decryption (e.g., “software for encryption” can typically also perform decryption), to make the encrypted information readable again (i.e., to make it unencrypted).
Encryption is used in protecting information within many kinds of systems, such as computers, networks (e.g. the Internet e-commerce), mobile telephones, wireless microphones, wireless intercom systems, Bluetooth devices and bank automatic teller machines. Encryption is also used in digital rights management to prevent unauthorized use or reproduction of copyrighted material and in software also to protect against reverse engineering (see also copy protection).
Object-oriented programming (OOP) is a programming paradigm that uses “objects” and their interactions to design applications and computer programs. Programming techniques may include, for example, features such as encapsulation, modularity, polymorphism, and inheritance. Many modern programming languages now support OOP.
Object-oriented programming may be seen as a collection of cooperating objects, as opposed to a traditional view in which a program may be seen as a group of tasks to compute (“subroutines”). In OOP, each object is capable of receiving messages, processing data, and sending messages to other objects. Moreover, each object may comprise a number of attributes.
Each object can be viewed as an independent machine with a distinct role or responsibility. The actions or “operators” on the objects are closely associated with the object. For example, in OOP, the data structures tend to carry their own operators around with them (or at least “inherit” them from a similar object or “class”).
An annotation, in the Java® computer programming language, is a special form of syntactic metadata that can be added to Java source code. (Java and all Java-based trademarks and logos are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.) For example, attributes, classes, methods, variables, parameters and packages may be annotated. Java annotations are reflective in that they are embedded in class files generated by the compiler and may be retained by the Java virtual machine to be made retrievable at run-time. Moreover, annotations themselves are annotated to indicate where and when they can be used.
WebSphere® dynacache, Memcache, tangasol and other caches often store data unencrypted in memory or encrypt an entire object. (WebSphere is a registered trademark of International Business Machines Corporation in the United States, other countries, or both.) That is, with these approaches, an object may be unencrypted or entirely encrypted (including all of the attributes of the object). Moreover, if an object is entirely encrypted, with current approaches, the entire object is encrypted using the same type of encryption (e.g., hash or RSA). (As should be understood by one skilled in the art RSA is not an acronym per se. Rather, the three letters are the first letters of the last names of the developers of RSA (i.e., Rivest, Shamir and Adleman).) However, these methods do not give control to the developer to determine what can be cached, and what types of encryption can be used on a piece of data. That is, these methods do not allow a developer to encrypt only particular attributes of an object. Moreover, these approaches do not allow a developer to assign different types of encryption to different attributes of the same object.
Accordingly, there exists a need in the art to overcome the deficiencies and limitations described hereinabove.